// #include<iostream>
// #include<cassert>
// #include<unistd.h>
// #include<cstring>
// #include<sys/wait.h>
// #include<sys/types.h>

// using namespace std;
// int main()
// {
//     //创建管道
//     int pipefd[2]={0};
//     int n=pipe(pipefd);
//     assert(n!=-1);
//     (void)n;

//     pid_t id=fork();
//     assert(id!=-1);
//     if(id==0)
//     {
//         //child
//         close(pipefd[1]);

//         char buffer[1024];
//         sleep(5);
//         while(true)
//         {
//             ssize_t mess = read(pipefd[0],buffer,sizeof(buffer));
//             if(mess>0)
//             {
//                 buffer[mess]=0;
//                 cout<<"father process say:"<<buffer<<endl;
//             }
//             else if(mess==0)
//             {
//                 cout<<"write end and father quit ,me quit"<<endl;
//                 break;
//             }
            
//         }
//         exit(0);
//     }

//     close(pipefd[0]);
//     string message="I am father->";
//     char buff[1024];
//     int count=0;
//     while(true)
//     {
//         snprintf(buff,sizeof(buff),"%s[%d]:%d",message.c_str(),getpid(),count++);
//         write(pipefd[1],buff,sizeof(buff));
//         sleep(5);
//         break;
//     }
//     close(pipefd[1]);
//     pid_t ret=waitpid(id,nullptr,0);//等id,阻塞方式等待，对返回信息不关心（nullptr）
//     assert(ret>0);
//     (void)ret;
//     close(pipefd[1]);
    

//     //cout<<"pipe[0]；"<<pipefd[0]<<endl;
//     //cout<<"pipe[1]: "<<pipefd[1]<<endl;
//     return 0;
// }


// #include <stdio.h>
// #include <unistd.h>
// #include <string.h>
// #include <stdlib.h>
// #include <sys/types.h>
// #include <sys/wait.h>
// int main()
// {
// 	int pipefd[2] = { 0 };
// 	if (pipe(pipefd) < 0)
//     { 
// 		perror("pipe");
// 		return 1;
// 	}
// 	pid_t id = fork(); 
// 	if (id == 0){
// 		//child
// 		close(pipefd[0]); 
// 		const char* msg = "hello father, I am child...";
// 		int count = 10;
// 		while (count--){
// 			write(pipefd[1], msg, strlen(msg));
// 			sleep(1);
// 		}
// 		close(pipefd[1]);
// 		exit(0);
// 	}
// 	//father
// 	close(pipefd[1]); 
// 	close(pipefd[0]); 
// 	int status = 0;
// 	waitpid(id, &status, 0);
// 	printf("child get signal:%d\n", status & 0x7F); 
// 	return 0;
// }

